Project Objective
Stock Portfolio Management System
The objective is to create a stock portfolio management system that allows users to manage their investments effectively. The system will provide the following features: *Portfolio Management: Users can add stocks, update, or remove them from their portfolio, including information like stock symbol plus company name , purchase date, purchase price, and quantity. Users can make separate portfolios.
*Real-Time Stock Prices: The system will retrieve real-time stock prices using financial APIs (e.g., Alpha Vantage or Yahoo Finance). Hence, users can view the current value of their portfolio based on the latest stock prices.
*Performance Metrics: The system will calculate key portfolio performance metrics, including total portfolio value, total gain/loss, percentage gain/loss, etc.
*Visualization: Users can visualize their portfolio's performance and check historical performance trends using interactive charts (e.g., line charts or pie charts).
Dataset Details For real-time stock prices and historical data, the system will utilize financial APIs to fetch stock information. We'll rely on live data from these APIs.
import pandas as pd
import numpy as np
import requests
import yfinance as yf # Import Yahoo Finance API for real-time stock prices
import plotly.graph_objs as go
import plotly.express as px
from datetime import datetime
from matplotlib import pyplot as plt
# Define Stock object with attributes
class Stock:
def __init__(self, symbol, company_name, purchase_date, purchase_price, quantity):
self.symbol = symbol
self.company_name = company_name
self.purchase_date = purchase_date
self.purchase_price = purchase_price
self.quantity = quantity
# Define Portfolio object with attributes and methods
class Portfolio:
def __init__(self, name):
self.name = name
self.stocks = []
# Define Add Stock Method
def add_stock(self, stock):
# Ensure consistent date formatting
try:
stock.purchase_date = datetime.strptime(stock.purchase_date, '%Y-%m-%d').date()
except ValueError:
print("Invalid date format. Please use 'YYYY-MM-DD' format.")
return self.stocks.append(stock)
# Define Remove Stock Method
def remove_stock(self, symbol):
self.stocks = [s for s in self.stocks if s.symbol != symbol]
# Define Get Current Stock Price Method
def get_current_stock_price(self, symbol):
# fetch real-time stock prices using Yahoo Finance API
stock = yf.Ticker(symbol)
current_price = stock.history(period="1d")["Close"].iloc[0]
return current_price
# Define Calculate Total Purchase Value Method
def calculate_total_purchase_value(self):
total_purchase_value = sum(stock.purchase_price * stock.quantity for stock in self.stocks)
return total_purchase_value
# Define Calculate Stock Gain Loss Method
def calculate_stock_gain_loss(self, stock):
current_price = self.get_current_stock_price(stock.symbol)
if current_price is not None:
purchase_value = stock.purchase_price * stock.quantity
current_value = current_price * stock.quantity
return current_value - purchase_value
return None # Default to None if current price cannot be fetched
# Define Calculate Total Gain/Loss Method
def calculate_total_gain_loss(self):
total_gain_loss = 0
for stock in self.stocks:
gain_loss = self.calculate_stock_gain_loss(stock)
total_gain_loss += gain_loss
return total_gain_loss
# Define Calculate Total Percentage Gain/Loss Method
def calculate_percentage_gain_loss(self):
total_gain_loss = self.calculate_total_gain_loss()
total_purchase_value = self.calculate_total_purchase_value()
if total_purchase_value != 0:
return (total_gain_loss / total_purchase_value) * 100
return None
# Define Calculate Total Portfolio Current Value Method
def calculate_portfolio_value(self):
total_value = 0
for stock in self.stocks:
current_price = self.get_current_stock_price(stock.symbol)
if current_price is not None:
stock_value = current_price * stock.quantity
total_value += stock_value
return total_value
# Define View Portfolio Details Method
def view_portfolio(self):
print(f"Portfolio Name: {self.name}")
print("Stocks in Portfolio:")
for stock in self.stocks:
print(f"\nStock Symbol: {stock.symbol}")
print(f"Company Name: {stock.company_name}")
print(f"Purchase Date: {stock.purchase_date}")
print(f"Purchase Price: ${stock.purchase_price:.2f}")
current_price = self.get_current_stock_price(stock.symbol)
print(f"Current Price: {current_price: .2f}")
print(f"Quantity: {stock.quantity}")
total_purchase_value = self.calculate_total_purchase_value()
total_current_value = self.calculate_portfolio_value()
total_gain_loss = self.calculate_total_gain_loss()
percentage_gain_loss = self.calculate_percentage_gain_loss()
print(f"\nTotal Purchase Value: {total_purchase_value}")
print(f"Total Current Value: ${total_current_value:.2f}")
print(f"Total Gain/Loss: ${total_gain_loss:.2f}")
print(f"Percentage Gain/Loss: {percentage_gain_loss:.2f}%")
# Define Edit Portfolio Name Method
def edit_portfolio(self, new_name):
self.name = new_name
# Define Edit Stock Details Method
def edit_stock_details(self, stock):
# Offer options to edit
while True:
print("\nEdit Stock Details:")
print("1. Edit Company Name")
print("2. Edit Purchase Date")
print("3. Edit Purchase Price")
print("4. Edit Quantity")
print("0. Done Editing")
choice = input("Select an option to edit stock details (1. Edit Company Name; 2. Edit Purchase Date; 3. Edit Purchase Price; 4. Edit Quantity; 0. Done Editing): ")
print(f"Option {choice} selected.")
if choice == '1':
edit_company_name = input("Enter the new company name: ")
stock.company_name = edit_company_name
print("Company name updated.")
elif choice == '2':
edit_purchase_date = input("Enter the new purchase date: ")
stock.purchase_date = edit_purchase_date
print("Purchase date updated.")
elif choice == '3':
edit_purchase_price = input("Enter the new purchase price: ")
stock.purchase_price = edit_purchase_price
print("Purchase price updated.")
elif choice == '4':
edit_quantity = input("Enter the new quantity: ")
stock.quantity = edit_quantity
print("Quantity updated.")
elif choice == '0':
print("Done editing stock details.")
break
else:
print("Invalid choice. Please select a valid option.")
# Define Plot Portfolio Performance for all stocks Method
def plot_portfolio_performance(self):
fig = go.Figure()
for stock in self.stocks:
# get historical data starting from the purchase date till now
historical_data = yf.Ticker(stock.symbol).history(start = stock.purchase_date, end = datetime.today().strftime('%Y-%m-%d'))
# plot the line graph
fig.add_trace(go.Scatter(x = historical_data.index, y = historical_data["Close"], mode='lines', name=stock.symbol))
fig.update_layout(
title=f"{portfolio.name} Portfolio Performance",
xaxis_title="Date",
yaxis_title="Closing Price",
xaxis_rangeslider_visible=True,
xaxis_type='category'
)
fig.show()
# Define Portfolio Total Value Visualization Over a given period Method
def visualize_portfolio_total_value_over_time(self, time_scale):
# Define time intervals (1w, 1mo, 1y)
if time_scale == '1w':
period = '1wk'
elif time_scale == '1mo':
period = '1mo'
elif time_scale == '1y':
period = '1y'
else:
raise ValueError("Invalid time scale")
fig, ax = plt.subplots(figsize=(10, 6))
# Create a list to store total current values
total_current_values = []
for stock in self.stocks:
# Fetch historical data for the selected time period
historical_data = yf.Ticker(stock.symbol).history(period=period)
# Calculate performance metrics for the stock
dates = historical_data.index
closing_prices = historical_data['Close']
current_values = closing_prices * stock.quantity
# Append current values for each stock
total_current_values.append(current_values)
# Calculate the total portfolio value by summing current values for all stocks
total_current_values = sum(total_current_values)
# Plot total portfolio current value over time
ax.plot(dates, total_current_values, label='Total Portfolio - Current Value')
# Customize the plot
ax.set_xlabel('Date')
ax.set_ylabel('Total Portfolio Value')
ax.set_title(f'Portfolio Total Value Over the Last {time_scale}')
ax.legend()
ax.grid(True)
plt.show()
# If you want to empty entire portfolios and rerun the program
# create a list to store portfolios
# portfolios = []
# Define main program
# Offer options to manage the stock portfolio
while True:
print("\nWelcome to Stock Portfolio Management System! Please select an option below:")
print("1. Create Portfolio")
print("2. Add Stock to Portfolio")
print("3. Remove Stock from Portfolio")
print("4. View Portfolio")
print("5. Calculate Portfolio Value")
print("6. Edit Portfolio Name")
print("7. Edit Stock Details")
print("8. Plot Portfolio Performance")
print("9. Visualize Total Portfolio Value Over Time")
print("0. Exit")
choice = input("Please select an option (1. Create Portfolio; 2. Add Stock to Portfolio; 3. Remove Stock from Portfolio; 4. View Portfolio; 5. Calculate Portfolio Value; 6. Edit Portfolio Name; 7. Edit Stock Details; 8. Plot Portfolio Performance; 9. Visualize Total Portfolio Value Over Time; 0 to exit): ")
print(f"Option {choice} selected.")
if choice == '1':
name = input("Enter the portfolio name you would like to create: ")
portfolio = Portfolio(name)
# add the new portfolio name
portfolios.append(portfolio)
print(f"Portfolio '{name}' created.")
elif choice == '2':
name = input("Enter the portfolio name to add stock: ")
# check the existing portfolio name
portfolio = next((p for p in portfolios if p.name == name), None)
if portfolio:
symbol = input("Enter stock symbol to add: ")
company_name = input("Enter company name: ")
purchase_date = input("Please use 'YYYY-MM-DD' format. Enter purchase date: ")
purchase_price = float(input("Enter purchase price: "))
quantity = int(input("Enter quantity: "))
stock = Stock(symbol, company_name, purchase_date, purchase_price, quantity)
# call Add Stock method
portfolio.add_stock(stock)
print(f"Stock added to the portfolio '{name}'.")
else:
print(f"Portfolio '{name}' not found.")
elif choice == '3':
name = input("Enter the portfolio name to remove stock: ")
# check the existing portfolio name
portfolio = next((p for p in portfolios if p.name == name), None)
if portfolio:
symbol = input("Enter stock symbol to remove: ")
# check the existing stock symbols
stock = next((s for s in portfolio.stocks if s.symbol == symbol), None)
if stock:
# call Remove Stock method
portfolio.remove_stock(symbol)
print(f"Stock '{symbol} removed from the portfolio '{name}'.")
else:
print(f"Stock '{symbol}' not found in portfolio '{name}'.")
else:
print(f"Portfolio '{name}' not found.")
elif choice == '4':
name = input("Enter the portfolio name to view: ")
# check the existing portfolio name
portfolio = next((p for p in portfolios if p.name == name), None)
if portfolio:
# call Portfolio View method
portfolio_view = portfolio.view_portfolio()
else:
print(f"Portfolio '{name}' not found.")
elif choice == '5':
name = input("Enter the portfolio name to get the performance metrics: ")
# check the existing portfolio name
portfolio = next((p for p in portfolios if p.name == name), None)
if portfolio:
portfolio_current_value = portfolio.calculate_portfolio_value()
portfolio_purchase_value = portfolio.calculate_total_purchase_value()
portfolio_gain_loss = portfolio.calculate_total_gain_loss()
portfolio_percentage_gain_loss = portfolio.calculate_percentage_gain_loss()
print(f"Total current value of '{name}' portfolio: ${portfolio_current_value:.2f}")
print(f"Total purchase value of '{name}' portfolio: ${portfolio_purchase_value:.2f}")
print(f"Total gain/loss of '{name}' portfolio: ${portfolio_gain_loss:.2f}")
print(f"Total percentage gain/loss of '{name}' portfolio: ${portfolio_percentage_gain_loss:.2f}%")
else:
print(f"Portfolio '{name}' not found.")
elif choice == '6':
name = input("Enter the portfolio name you want to edit: ")
# check the existing portfolio name
portfolio = next((p for p in portfolios if p.name == name), None)
if portfolio:
new_name = input("Enter the new portfolio name: ")
portfolio.edit_portfolio(new_name)
print(f"Portfolio name updated to '{new_name}'.")
else:
print(f"Portfolio '{name}' not found.")
elif choice == '7':
name = input("Enter the portfolio name containing the stock you want to edit: ")
# check the existing portfolio name
portfolio = next((p for p in portfolios if p.name == name), None)
if portfolio:
symbol = input("Enter stock symbol to edit: ")
# check the existing stock symbols
stock = next((s for s in portfolio.stocks if s.symbol == symbol), None)
if stock:
portfolio.edit_stock_details(stock)
else:
print(f"Stock '{symbol}' not found in portfolio '{name}'.")
else:
print(f"Portfolio '{name}' not found.")
elif choice == '8':
# Plot portfolio performance
name = input("Enter the portfolio name to plot performance: ")
# check the existing portfolio name
portfolio = next((p for p in portfolios if p.name == name), None)
if portfolio:
portfolio.plot_portfolio_performance()
else:
print(f"Portfolio '{name}' not found.")
elif choice == '9':
name = input("Enter the portfolio name to plot performance: ")
# check the existing portfolio name
portfolio = next((p for p in portfolios if p.name == name), None)
if portfolio:
time_scale = input("Enter the time scale (1w, 1mo, 1y): ")
# Integrate the visualization
result = portfolio.visualize_portfolio_total_value_over_time(time_scale)
if result is not None:
fig, ax = result
plt.show()
else:
print("The visualization function returned None.")
else:
print(f"Portfolio '{name}' not found.")
elif choice == '0':
print("Exiting the management program. Thank you!")
break
else:
print("Invalid choice. Please select a valid option.")
Welcome to Stock Portfolio Management System! Please select an option below: 1. Create Portfolio 2. Add Stock to Portfolio 3. Remove Stock from Portfolio 4. View Portfolio 5. Calculate Portfolio Value 6. Edit Portfolio Name 7. Edit Stock Details 8. Plot Portfolio Performance 9. Visualize Total Portfolio Value Over Time 0. Exit Please select an option (1. Create Portfolio; 2. Add Stock to Portfolio; 3. Remove Stock from Portfolio; 4. View Portfolio; 5. Calculate Portfolio Value; 6. Edit Portfolio Name; 7. Edit Stock Details; 8. Plot Portfolio Performance; 9. Visualize Total Portfolio Value Over Time; 0 to exit): 1 Option 1 selected. Enter the portfolio name you would like to create: abc Portfolio 'abc' created. Welcome to Stock Portfolio Management System! Please select an option below: 1. Create Portfolio 2. Add Stock to Portfolio 3. Remove Stock from Portfolio 4. View Portfolio 5. Calculate Portfolio Value 6. Edit Portfolio Name 7. Edit Stock Details 8. Plot Portfolio Performance 9. Visualize Total Portfolio Value Over Time 0. Exit Please select an option (1. Create Portfolio; 2. Add Stock to Portfolio; 3. Remove Stock from Portfolio; 4. View Portfolio; 5. Calculate Portfolio Value; 6. Edit Portfolio Name; 7. Edit Stock Details; 8. Plot Portfolio Performance; 9. Visualize Total Portfolio Value Over Time; 0 to exit): 2 Option 2 selected. Enter the portfolio name to add stock: abc Enter stock symbol to add: NVDA Enter company name: Nvidia Please use 'YYYY-MM-DD' format. Enter purchase date: 2023-09-09 Enter purchase price: 360 Enter quantity: 100 Stock added to the portfolio 'abc'. Welcome to Stock Portfolio Management System! Please select an option below: 1. Create Portfolio 2. Add Stock to Portfolio 3. Remove Stock from Portfolio 4. View Portfolio 5. Calculate Portfolio Value 6. Edit Portfolio Name 7. Edit Stock Details 8. Plot Portfolio Performance 9. Visualize Total Portfolio Value Over Time 0. Exit Please select an option (1. Create Portfolio; 2. Add Stock to Portfolio; 3. Remove Stock from Portfolio; 4. View Portfolio; 5. Calculate Portfolio Value; 6. Edit Portfolio Name; 7. Edit Stock Details; 8. Plot Portfolio Performance; 9. Visualize Total Portfolio Value Over Time; 0 to exit): 2 Option 2 selected. Enter the portfolio name to add stock: abc Enter stock symbol to add: AAPL Enter company name: Apple Please use 'YYYY-MM-DD' format. Enter purchase date: 2023-10-02 Enter purchase price: 180 Enter quantity: 150 Stock added to the portfolio 'abc'. Welcome to Stock Portfolio Management System! Please select an option below: 1. Create Portfolio 2. Add Stock to Portfolio 3. Remove Stock from Portfolio 4. View Portfolio 5. Calculate Portfolio Value 6. Edit Portfolio Name 7. Edit Stock Details 8. Plot Portfolio Performance 9. Visualize Total Portfolio Value Over Time 0. Exit Please select an option (1. Create Portfolio; 2. Add Stock to Portfolio; 3. Remove Stock from Portfolio; 4. View Portfolio; 5. Calculate Portfolio Value; 6. Edit Portfolio Name; 7. Edit Stock Details; 8. Plot Portfolio Performance; 9. Visualize Total Portfolio Value Over Time; 0 to exit): 2 Option 2 selected. Enter the portfolio name to add stock: abc Enter stock symbol to add: AMZN Enter company name: Amazon Please use 'YYYY-MM-DD' format. Enter purchase date: 2023-09-17 Enter purchase price: 240 Enter quantity: 200 Stock added to the portfolio 'abc'. Welcome to Stock Portfolio Management System! Please select an option below: 1. Create Portfolio 2. Add Stock to Portfolio 3. Remove Stock from Portfolio 4. View Portfolio 5. Calculate Portfolio Value 6. Edit Portfolio Name 7. Edit Stock Details 8. Plot Portfolio Performance 9. Visualize Total Portfolio Value Over Time 0. Exit Please select an option (1. Create Portfolio; 2. Add Stock to Portfolio; 3. Remove Stock from Portfolio; 4. View Portfolio; 5. Calculate Portfolio Value; 6. Edit Portfolio Name; 7. Edit Stock Details; 8. Plot Portfolio Performance; 9. Visualize Total Portfolio Value Over Time; 0 to exit): 4 Option 4 selected. Enter the portfolio name to view: abc Portfolio Name: abc Stocks in Portfolio: Stock Symbol: NVDA Company Name: Nvidia Purchase Date: 2023-09-09 Purchase Price: $360.00 Current Price: 431.78 Quantity: 100 Stock Symbol: AAPL Company Name: Apple Purchase Date: 2023-10-02 Purchase Price: $180.00 Current Price: 172.25 Quantity: 150 Stock Symbol: AMZN Company Name: Amazon Purchase Date: 2023-09-17 Purchase Price: $240.00 Current Price: 128.17 Quantity: 200 Total Purchase Value: 111000.0 Total Current Value: $94649.66 Total Gain/Loss: $-16350.34 Percentage Gain/Loss: -14.72% Welcome to Stock Portfolio Management System! Please select an option below: 1. Create Portfolio 2. Add Stock to Portfolio 3. Remove Stock from Portfolio 4. View Portfolio 5. Calculate Portfolio Value 6. Edit Portfolio Name 7. Edit Stock Details 8. Plot Portfolio Performance 9. Visualize Total Portfolio Value Over Time 0. Exit Please select an option (1. Create Portfolio; 2. Add Stock to Portfolio; 3. Remove Stock from Portfolio; 4. View Portfolio; 5. Calculate Portfolio Value; 6. Edit Portfolio Name; 7. Edit Stock Details; 8. Plot Portfolio Performance; 9. Visualize Total Portfolio Value Over Time; 0 to exit): 8 Option 8 selected. Enter the portfolio name to plot performance: abc
Welcome to Stock Portfolio Management System! Please select an option below: 1. Create Portfolio 2. Add Stock to Portfolio 3. Remove Stock from Portfolio 4. View Portfolio 5. Calculate Portfolio Value 6. Edit Portfolio Name 7. Edit Stock Details 8. Plot Portfolio Performance 9. Visualize Total Portfolio Value Over Time 0. Exit Please select an option (1. Create Portfolio; 2. Add Stock to Portfolio; 3. Remove Stock from Portfolio; 4. View Portfolio; 5. Calculate Portfolio Value; 6. Edit Portfolio Name; 7. Edit Stock Details; 8. Plot Portfolio Performance; 9. Visualize Total Portfolio Value Over Time; 0 to exit): 9 Option 9 selected. Enter the portfolio name to plot performance: abc Enter the time scale (1w, 1mo, 1y): 1w
The visualization function returned None. Welcome to Stock Portfolio Management System! Please select an option below: 1. Create Portfolio 2. Add Stock to Portfolio 3. Remove Stock from Portfolio 4. View Portfolio 5. Calculate Portfolio Value 6. Edit Portfolio Name 7. Edit Stock Details 8. Plot Portfolio Performance 9. Visualize Total Portfolio Value Over Time 0. Exit Please select an option (1. Create Portfolio; 2. Add Stock to Portfolio; 3. Remove Stock from Portfolio; 4. View Portfolio; 5. Calculate Portfolio Value; 6. Edit Portfolio Name; 7. Edit Stock Details; 8. Plot Portfolio Performance; 9. Visualize Total Portfolio Value Over Time; 0 to exit): 0 Option 0 selected. Exiting the management program. Thank you!
# User Login System for future work
# class User:
# def __init__(self, username, password):
# self.username = username
# self.password = password
#
# def is_authenticated(self, input_password):
# return self.password == input_password
#
# class PortfolioManager:
# def __init__(self):
# self.user_data = {} # Initialize user data as an empty dictionary
# self.user_file = "user_data.json" # File to store user data
# self.load_user_data() # Load user data from the file at the start
#
# def create_user(self, username, password):
# if username in self.user_data:
# print("User already exists.")
# else:
# self.user_data[username] = {"password": password, "portfolios": []}
# self.save_user_data() # Save user data after creating a new user
# print(f"User {username} created successfully.")
#
# def login(self, username, password):
# user = self.user_data.get(username)
# if user:
# if user["password"] == password:
# return True # Valid username and password
# else:
# print("Invalid password.")
# else:
# print("Invalid username or user not found.")
# return False # Login unsuccessful
#
# def save_user_data(self):
# user_data_to_save = self.user_data
# for username, data in user_data_to_save.items():
# # Serialize the portfolios and stocks to a JSON-friendly format
# data["portfolios"] = [portfolio.__dict__ for portfolio in data["portfolios"]]
# for portfolio_data in data["portfolios"]:
# portfolio_data["stocks"] = [stock.__dict__ for stock in portfolio_data["stocks"]]
#
# with open(self.user_file, 'w') as file:
# json.dump(user_data_to_save, file, indent=4)
#
# def load_user_data(self):
# try:
# with open(self.user_file, 'r') as file:
# self.user_data = json.load(file)
# except FileNotFoundError:
# # Handle the case where the user data file doesn't exist yet
# pass
# Portfolio Manager linking with User Login
# def main():
# portfolio_manager = PortfolioManager()
# portfolio_manager.load_user_data() # Load user accounts from the file
#
# while True:
# print("\nWelcome to Stock Portfolio Management Login System! Please select an option below:")
# print("1. Create New User")
# print("2. Login")
# print("0. Exit")
#
# choice = input("Welcome to Stock Portfolio Management Login System. Select an option: 1. Create New User; 2. Login; 0. Exit")
# print(f"Option {choice} selected.")
#
# if choice == '1':
# username = input("Create a username: ")
# password = input("Create a password: ")
# portfolio_manager.create_user(username, password)
# elif choice == '2':
# username = input("Enter your username: ")
# password = input("Enter your password: ")
# if portfolio_manager.login(username, password):
# print("Login successful.")
# portfolio_management(username, portfolio_manager) # Pass username and portfolio manager
# else:
# print("Invalid username or password.")
# elif choice == '0':
# print(f"Exiting the login system. Thank you!")
# break
# else:
# print("Invalid choice. Please select a valid option.")
#
# def portfolio_management(username, portfolio_manager):
#
# while True:
# print("\nWelcome to your account! Please select an option below:")
# print("1. Create Portfolio")
# print("2. Add Stock to Portfolio")
# print("3. Remove Stock from Portfolio")
# print("4. View Portfolio")
# print("5. Calculate Portfolio Value")
# print("0. Exit")
#
# choice = input("Welcome to your account! Please select an option (1. Create Portfolio; 2. Add Stock to Portfolio; 3. Remove Stock from Portfolio; 4. View Portfolio; 5. Calculate Portfolio Value; 0 to exit): ")
# print(f"Option {choice} selected.")
#
# if choice == '1':
# # Create a portfolio
# name = input("Enter the portfolio name you would like to create: ")
# new_portfolio = Portfolio(name)
# portfolio_manager.user_data[username]["portfolios"].append(new_portfolio)
# portfolio_manager.save_user_data() # Save user data after creating a portfolio
# print(f"Portfolio '{name}' created.")
# continue
# elif choice == '2':
# # Add stock to portfolio
# name = input("Enter the portfolio name to add stock: ")
# portfolio = next((p for p in portfolio_manager.user_data[username]["portfolios"] if p.name == name), None)
# if portfolio:
# # Add stock to the selected portfolio
# stock = Stock(symbol, company_name, purchase_date, purchase_price, quantity)
# portfolio.add_stock(stock)
# portfolio_manager.save_user_data() # Save user data after adding a stock
# print(f"Stock added to the portfolio '{name}'.")
# else:
# print(f"Portfolio '{name}' not found.")
# elif choice == '3':
# # Remove stock from portfolio
# name = input("Enter the portfolio name to remove stock: ")
# portfolio = next((p for p in portfolio_manager.user_data[username]["portfolios"] if p.name == name), None)
# if portfolio:
# symbol = input("Enter stock symbol to remove: ")
# portfolio.remove_stock(symbol)
# portfolio_manager.save_user_data() # Save user data after removing a stock
# print(f"Stock '{symbol}' removed from the portfolio '{name}'.")
# else:
# print(f"Portfolio '{name}' not found.")
# elif choice == '4':
# # View portfolio
# name = input("Enter the portfolio name to view: ")
# portfolio = next((p for p in portfolio_manager.user_data[username]["portfolios"] if p.name == name), None)
# if portfolio:
# portfolio.view_portfolio()
# else:
# print(f"Portfolio '{name}' not found.")
# elif choice == '5':
# # Calculate portfolio value
# name = input("Enter the portfolio name: ")
# portfolio = next((p for p in portfolio_manager.user_data[username]["portfolios"] if p.name == name), None)
# if portfolio:
# portfolio_value = portfolio.calculate_portfolio_value()
# print(f"Total value of '{name}' portfolio: ${portfolio_value:.2f}")
# else:
# print(f"Portfolio '{name}' not found.")
# elif choice == '0':
# print(f"Exiting the management program. Thank you!")
# break
# else:
# print("Invalid choice. Please select a valid option.")
#
# if __name__ == "__main__":
# main()